#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>


//蛇形矩阵
//（0,0）
//（1,0）（0,1）
//（2,0）（1,1）（0,2）
//（3,0）（2,1）（1,2）（0,3）
//（4,0）（3,1）（2,2）（1,3）（0,4）
//row + column = const
using  namespace std;

class SnakeMatrix
{
public:
    static void solution(int n)
    {
        int mat[n][n] = {};
        //initialize
        for(int i = 0, count = 1; i != n; ++i)
        {
           for(int j = i; j != -1; j--)
           {
               mat[j][i - j] = count;
               ++count;
           }
        }
        for(int i = 0; i != n; ++i)
        {
            cout<<mat[i][0];
            for(int j = 1; j != n; ++j)
            {
                #include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>

using  namespace std;

class SnakeMatrix
{
public:
    static void solution(int n)
    {
        int mat[100][100] = {0};

        //initialize
        for(int i = 0, count = 1; i != n; ++i)
        {
           for(int j = i; j != -1; j--)
           {
               mat[j][i - j] = count;
               ++count;
           }
        }
        for(int i = 0; i != n; ++i)
        {
            cout<<mat[i][0];
            for(int j = 1; j != n-i; ++j)
            {
                cout<<" "<<mat[i][j];
            }
            cout<<endl;
        }
    }
};

int main()
{
    int n;
    cin>>n;
    SnakeMatrix test;
    test.solution(n);

    return 0;
}
                { cout<<mat[i][j]<<"  ";}
            }
        }

    }
};

int main()
{
    int n;
    cin>>n;
    SnakeMatrix test;
    test.solution(n);

    return 0;
}